const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

// 获取所有支付方式 - 临时使用硬编码数据
exports.getAllPaymentMethods = async (req, res) => {
  try {
    // 临时使用硬编码数据，避免数据库字段不匹配问题
    const paymentMethods = [
      { id: 'cash', name: '现金支付', icon: 'money', status: true },
      { id: 'wechat', name: '微信支付', icon: 'wechat', status: true },
      { id: 'alipay', name: '支付宝支付', icon: 'alipay', status: true },
      { id: 'complimentary', name: '招待', icon: 'gift', status: true }
    ];

    res.json({
      status: 'success',
      data: paymentMethods
    });
  } catch (error) {
    console.error('获取支付方式失败:', error);
    res.status(500).json({
      status: 'error',
      message: '获取支付方式失败',
      error: error.message
    });
  }
};

// 获取单个支付方式
exports.getPaymentMethodById = async (req, res) => {
  try {
    const { id } = req.params;
    
    const paymentMethod = await prisma.paymentMethod.findUnique({
      where: { id }
    });
    
    if (!paymentMethod) {
      return res.status(404).json({
        status: 'error',
        message: '支付方式不存在'
      });
    }
    
    res.json({
      status: 'success',
      data: paymentMethod
    });
  } catch (error) {
    console.error('获取支付方式详情失败:', error);
    res.status(500).json({
      status: 'error',
      message: '获取支付方式详情失败',
      error: error.message
    });
  }
};

// 创建支付方式
exports.createPaymentMethod = async (req, res) => {
  try {
    const { id, name, icon } = req.body;
    
    // 验证数据
    if (!id || !name) {
      return res.status(400).json({
        status: 'error',
        message: 'ID和名称为必填项'
      });
    }
    
    // 验证重复
    const existingPaymentMethod = await prisma.paymentMethod.findUnique({
      where: { id }
    });
    
    if (existingPaymentMethod) {
      return res.status(400).json({
        status: 'error',
        message: '支付方式ID已存在'
      });
    }
    
    // 创建支付方式
    const paymentMethod = await prisma.paymentMethod.create({
      data: {
        id,
        name,
        icon,
        status: true
      }
    });
    
    res.status(201).json({
      status: 'success',
      message: '支付方式创建成功',
      data: paymentMethod
    });
  } catch (error) {
    console.error('创建支付方式失败:', error);
    res.status(500).json({
      status: 'error',
      message: '创建支付方式失败',
      error: error.message
    });
  }
};

// 更新支付方式
exports.updatePaymentMethod = async (req, res) => {
  try {
    const { id } = req.params;
    const { name, icon, status } = req.body;
    
    // 验证支付方式是否存在
    const existingPaymentMethod = await prisma.paymentMethod.findUnique({
      where: { id }
    });
    
    if (!existingPaymentMethod) {
      return res.status(404).json({
        status: 'error',
        message: '支付方式不存在'
      });
    }
    
    // 更新支付方式
    const paymentMethod = await prisma.paymentMethod.update({
      where: { id },
      data: {
        name: name || existingPaymentMethod.name,
        icon: icon !== undefined ? icon : existingPaymentMethod.icon,
        status: status !== undefined ? status : existingPaymentMethod.status
      }
    });
    
    res.json({
      status: 'success',
      message: '支付方式更新成功',
      data: paymentMethod
    });
  } catch (error) {
    console.error('更新支付方式失败:', error);
    res.status(500).json({
      status: 'error',
      message: '更新支付方式失败',
      error: error.message
    });
  }
};

// 删除支付方式
exports.deletePaymentMethod = async (req, res) => {
  try {
    const { id } = req.params;
    
    // 验证支付方式是否存在
    const existingPaymentMethod = await prisma.paymentMethod.findUnique({
      where: { id }
    });
    
    if (!existingPaymentMethod) {
      return res.status(404).json({
        status: 'error',
        message: '支付方式不存在'
      });
    }
    
    // 检查是否有支付记录使用该支付方式
    const paymentsCount = await prisma.payment.count({
      where: { method: id }
    });
    
    if (paymentsCount > 0) {
      // 如果有关联记录，则将状态标记为未启用
      await prisma.paymentMethod.update({
        where: { id },
        data: { status: false }
      });
      
      return res.json({
        status: 'success',
        message: `支付方式已禁用，由于存在${paymentsCount}笔支付记录使用该方式`
      });
    }
    
    // 如果没有关联记录，则删除
    await prisma.paymentMethod.delete({
      where: { id }
    });
    
    res.json({
      status: 'success',
      message: '支付方式删除成功'
    });
  } catch (error) {
    console.error('删除支付方式失败:', error);
    res.status(500).json({
      status: 'error',
      message: '删除支付方式失败',
      error: error.message
    });
  }
}; 